rest and spread operator explained